package com.ruoyi.framework.mybatisplus.strategy;

import com.baomidou.mybatisplus.core.conditions.AbstractWrapper;

import java.lang.reflect.Field;

/**
 * 查询策略接口
 * 定义了查询策略的基本行为，用于实现不同的查询条件构建策略
 * 每个具体的策略类都需要实现此接口
 * 
 * @author xuzhen97
 */
public interface QueryStrategy {
    /**
     * 应用查询策略
     * 根据字段信息构建相应的查询条件，并添加到查询包装器中
     * 
     * @param prefix 字段名前缀，用于处理关联查询时的字段前缀
     * @param obj 查询对象，包含查询条件
     * @param key 字段名，用于获取字段值
     * @param field 字段对象，包含字段的元数据信息
     * @param wrapper 查询包装器，用于构建SQL查询条件
     */
    void apply(String prefix, Object obj, String key, Field field, AbstractWrapper wrapper);

    /**
     * 检查策略是否匹配给定的字段名
     * 用于确定是否应该使用此策略处理该字段
     * 
     * @param fieldName 要检查的字段名
     * @return 如果此策略应该处理该字段则返回true，否则返回false
     */
    boolean matches(String fieldName);
} 